home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: New Zealand Amiga Users Group / New Zealand Amiga Users Group Newsdisk v25 (1989-08)(NZAmigaUG).zip / New Zealand Amiga Users Group Newsdisk v25 (1989-08)(NZAmigaUG).adf / Strink / strink.c < prev    next >
C/C++ Source or Header  |  1993-12-03  |  10KB  |  367 lines

  1. /*
  2.                 Strink.c
  3.  
  4.     This is a simple program which opens a window with a close gadget
  5.     and a strink gadget which will make the window strink to an icon.
  6.  
  7.                   by
  8.  
  9.                   David Annett
  10.                 3 Sutherland Ave,
  11.                    Upper Hutt,
  12.                   New Zealand.
  13.  
  14.                  © 25 June 1989
  15.  
  16. */
  17.  
  18. #include "exec/types.h"
  19. #include <exec/memory.h>
  20.  
  21. #include "graphics/gfx.h"
  22. #include "libraries/dos.h"
  23. #include "intuition/intuition.h"
  24.  
  25. #include "proto/graphics.h"
  26. #include "proto/exec.h"
  27. #include "proto/intuition.h"
  28. #include "proto/dos.h"
  29.  
  30. extern struct Library *OpenLibrary();
  31. extern VOID CloseLibrary ();
  32.  
  33. USHORT *TempPtr, *StrinkDatPtr, StrinkData []=
  34.     {
  35.     0xFFFF,
  36.     0xFC3F,
  37.     0xFC3F,
  38.     0xFC3F,
  39.     0xC003,
  40.     0xF00F,
  41.     0xFC3F,
  42.     0xFFFF,
  43.     /**/
  44.     0x0000,
  45.     0x03C0,
  46.     0x03C0,
  47.     0x03C0,
  48.     0x3FFC,
  49.     0x0FF0,
  50.     0x03C0,
  51.     0x0000
  52.     };
  53.  
  54. struct Image StrinkImage =
  55.     {
  56.     0,0,            /* left, top            */
  57.     16,8,2,            /* width, height, depth        */
  58.     &StrinkData[0],        /* image data set by program    */
  59.     0x3,0x0,            /* Plane Pick, Plane On Off    */
  60.     NULL            /* Next Image            */
  61.     };
  62.  
  63. #define IconXsize 79
  64. #define IconYsize 56
  65.  
  66. USHORT *IconDatPtr, IconData []=
  67.     {
  68. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  69. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  70. 0xFBEF, 0xFFFF, 0x7FFF, 0xFFFF, 0xFFFF,
  71. 0xFBEF, 0xFFFF, 0x7FFF, 0xFFFF, 0xFFFF,
  72. 0xFDE1, 0xBD83, 0x0DEE, 0x383F, 0xFFFF,
  73. 0xFEEF, 0xBD7F, 0x7DED, 0xF77F, 0xFFFF,
  74. 0xFF6F, 0xBD7F, 0x7DED, 0xF6FF, 0xFFFF,
  75. 0xFF6F, 0xBD7F, 0x7DED, 0xF7FF, 0xFFFF,
  76. 0xF0F1, 0xC383, 0x8E1D, 0xF83F, 0xFFFF,
  77. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  78. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  79. 0xFFFF, 0x82E8, 0x2E82, 0x0831, 0xBBFF,
  80. 0xFFFF, 0xEE6E, 0xEEEF, 0xBEEE, 0x9BFF,
  81. 0xFFFF, 0xEEAE, 0xEEEF, 0xBEEE, 0xABFF,
  82. 0xFFFF, 0xEECE, 0xEEEF, 0xBEEE, 0xB3FF,
  83. 0xFFFF, 0x82EE, 0xF183, 0xB831, 0xBBFF,
  84. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  85. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  86. 0xFFFF, 0xC61C, 0x61BA, 0x0C70, 0xFFFF,
  87. 0xFFFF, 0xBEEB, 0xAEBB, 0xBBAF, 0xFFFF,
  88. 0xFFFF, 0xA218, 0x2183, 0xBBF1, 0xFFFF,
  89. 0xFFFF, 0xBADB, 0xAFBB, 0xBBBE, 0xFFFF,
  90. 0xFFFF, 0xC6EB, 0xAFBA, 0x0C61, 0xFFFF,
  91. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  92. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  93. 0xFFFF, 0x82E8, 0x31FF, 0xFFFF, 0xFFFF,
  94. 0xFFFF, 0xBF5B, 0xEEFF, 0xFFFF, 0xFFFF,
  95. 0xFFFF, 0x87B8, 0x6FFF, 0xFFFF, 0xFFFF,
  96. 0xFFFF, 0xBF5B, 0xEEFF, 0xFFFF, 0xFFFF,
  97. 0xFFFF, 0x82E8, 0x31FF, 0xFFFF, 0xFFFF,
  98. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  99. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  100. 0xFFFF, 0x871B, 0xA1C7, 0x183F, 0xFFFF,
  101. 0xFFFF, 0xBAE9, 0x2EBA, 0xEEFF, 0xFFFF,
  102. 0xFFFF, 0x86EA, 0xA1BA, 0xEEFF, 0xFFFF,
  103. 0xFFFF, 0xB6EB, 0xAEBA, 0xEEFF, 0xFFFF,
  104. 0xFFFF, 0xBB1B, 0xA0C7, 0x1EFF, 0xFFFF,
  105. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  106. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  107. 0xFFFF, 0x82E8, 0x71BB, 0x0831, 0xBBFF,
  108. 0xFFFF, 0xBF5B, 0xAE9A, 0xFEEE, 0x9BFF,
  109. 0xFFFF, 0x87B8, 0x60AB, 0x1EEE, 0xABFF,
  110. 0xFFFF, 0xBF5B, 0xEEB3, 0xEEEE, 0xB3FF,
  111. 0xFFFF, 0x82EB, 0xEEBA, 0x1831, 0xBBFF,
  112. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  113. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  114. 0xFF86, 0x182E, 0xFFFF, 0x7630, 0xC1FF,
  115. 0xFFBA, 0xEBEE, 0xFFFF, 0x25D7, 0x5FFF,
  116. 0xFF86, 0x1875, 0xFFFF, 0x55D0, 0xC3FF,
  117. 0xFFBE, 0xDBF5, 0xFFFF, 0x75D6, 0xDFFF,
  118. 0xFFBE, 0xE83B, 0xFFFF, 0x7637, 0x41FF,
  119. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  120. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  121. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  122. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  123. 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
  124. /* Second bit plane */
  125. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  126. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  127. 0x0410, 0x0000, 0x8000, 0x0000, 0x0000,
  128. 0x0410, 0x0000, 0x8000, 0x0000, 0x0000,
  129. 0x021E, 0x427C, 0xF211, 0xC7C0, 0x0000,
  130. 0x0110, 0x4280, 0x8212, 0x0880, 0x0000,
  131. 0x0090, 0x4280, 0x8212, 0x0900, 0x0000,
  132. 0x0090, 0x4280, 0x8212, 0x0800, 0x0000,
  133. 0x0F0E, 0x3C7C, 0x71E2, 0x07C0, 0x0000,
  134. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  135. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  136. 0x0000, 0x7D17, 0xD17D, 0xF7CE, 0x4400,
  137. 0x0000, 0x1191, 0x1110, 0x4111, 0x6400,
  138. 0x0000, 0x1151, 0x1110, 0x4111, 0x5400,
  139. 0x0000, 0x1131, 0x1110, 0x4111, 0x4C00,
  140. 0x0000, 0x7D11, 0x0E7C, 0x47CE, 0x4400,
  141. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  142. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  143. 0x0000, 0x39E3, 0x9E45, 0xF38F, 0x0000,
  144. 0x0000, 0x4114, 0x5144, 0x4450, 0x0000,
  145. 0x0000, 0x5DE7, 0xDE7C, 0x440E, 0x0000,
  146. 0x0000, 0x4524, 0x5044, 0x4441, 0x0000,
  147. 0x0000, 0x3914, 0x5045, 0xF39E, 0x0000,
  148. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  149. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  150. 0x0000, 0x7D17, 0xCE00, 0x0000, 0x0000,
  151. 0x0000, 0x40A4, 0x1100, 0x0000, 0x0000,
  152. 0x0000, 0x7847, 0x9000, 0x0000, 0x0000,
  153. 0x0000, 0x40A4, 0x1100, 0x0000, 0x0000,
  154. 0x0000, 0x7D17, 0xCE00, 0x0000, 0x0000,
  155. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  156. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  157. 0x0000, 0x78E4, 0x5E38, 0xE7C0, 0x0000,
  158. 0x0000, 0x4516, 0xD145, 0x1100, 0x0000,
  159. 0x0000, 0x7915, 0x5E45, 0x1100, 0x0000,
  160. 0x0000, 0x4914, 0x5145, 0x1100, 0x0000,
  161. 0x0000, 0x44E4, 0x5F38, 0xE100, 0x0000,
  162. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  163. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  164. 0x0000, 0x7D17, 0x8E44, 0xF7CE, 0x4400,
  165. 0x0000, 0x40A4, 0x5165, 0x0111, 0x6400,
  166. 0x0000, 0x7847, 0x9F54, 0xE111, 0x5400,
  167. 0x0000, 0x40A4, 0x114C, 0x1111, 0x4C00,
  168. 0x0000, 0x7D14, 0x1145, 0xE7CE, 0x4400,
  169. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  170. 0x03FF, 0xFFFF, 0xC003, 0xFFFF, 0xFFC0,
  171. 0x0386, 0x182E, 0xC003, 0x7630, 0xC1C0,
  172. 0x03BA, 0xEBEE, 0xC003, 0x25D7, 0x5FC0,
  173. 0x0386, 0x1875, 0xC003, 0x55D0, 0xC3C0,
  174. 0x03BE, 0xDBF5, 0xC003, 0x75D6, 0xDFC0,
  175. 0x03BE, 0xE83B, 0xC003, 0x7637, 0x41C0,
  176. 0x03FF, 0xFFFF, 0xC003, 0xFFFF, 0xFFC0,
  177. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  178. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  179. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  180. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
  181.    }; 
  182. struct Image IconImage =
  183.     {
  184.     0,0,            /* left, top            */
  185.     IconXsize,IconYsize,2,    /* width, height, depth        */
  186.     &StrinkData[0],        /* image data set by program    */
  187.     0x3,0x0,            /* Plane Pick, Plane On Off    */
  188.     NULL            /* Next Image            */
  189.     };
  190.  
  191. struct Gadget StrinkGadget =
  192.     {
  193.     NULL,            /* Next gadget            */
  194.     0,-8,16,8,            /* left, top, width, height    */
  195.     GADGHCOMP|GADGIMAGE|GRELBOTTOM, /* flags            */
  196.     RELVERIFY,            /* activation flags        */
  197.     BOOLGADGET,            /* gadget type            */
  198.     &StrinkImage,        /* gadget render        */
  199.     NULL,            /* select render        */
  200.     NULL,            /* gadget's IntuiText        */
  201.     NULL,            /* mutual exclude        */
  202.     NULL,            /* special info            */
  203.     NULL,            /* gadget id            */
  204.     NULL            /* user data            */
  205.     };
  206.  
  207. struct Gadget IconGadget =
  208.     {
  209.     NULL,            /* Next gadget            */
  210.     0,0,0,0,            /* left, top, width, height    */
  211.     GADGHCOMP|GADGIMAGE|GRELWIDTH|GRELHEIGHT, /* flags            */
  212.     GADGIMMEDIATE,        /* activation flags        */
  213.     WDRAGGING,            /* gadget type            */
  214.     &IconImage,            /* gadget render        */
  215.     NULL,            /* select render        */
  216.     NULL,            /* gadget's IntuiText        */
  217.     NULL,            /* mutual exclude        */
  218.     NULL,            /* special info            */
  219.     NULL,            /* gadget id            */
  220.     NULL            /* user data            */
  221.     };
  222.  
  223. struct NewWindow nw={
  224.    180,20,
  225.    200,40,
  226.    0,1,
  227.    CLOSEWINDOW | GADGETUP,
  228.    WINDOWDEPTH|WINDOWCLOSE|WINDOWDRAG|WINDOWSIZING|SMART_REFRESH,
  229.    &StrinkGadget,
  230.    NULL,
  231.    "Strink",
  232.    NULL,
  233.    NULL,
  234.    10,20,
  235.    640,256,
  236.    WBENCHSCREEN};
  237.  
  238. struct NewWindow iw={
  239.    100,100,
  240.    IconXsize,IconYsize,
  241.    0,1,
  242.    GADGETDOWN,
  243.    BORDERLESS|SMART_REFRESH,
  244.    &IconGadget,
  245.    NULL,
  246.    NULL,
  247.    NULL,
  248.    NULL,
  249.    0,0,0,0,
  250.    WBENCHSCREEN};
  251.  
  252. struct Window *w;
  253. struct RastPort *rp;
  254. struct IntuiMessage *wmsg, *iwmsg;
  255. extern void CleanUp();
  256. extern void StrinkWindow();
  257.  
  258. void main()
  259. {
  260. ULONG Count, mClass;
  261.  
  262.   if(!(IntuitionBase=(struct IntuitionBase *)
  263.     OpenLibrary("intuition.library",0)))
  264.     CleanUp();
  265.   if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0)))
  266.     CleanUp();
  267.   if(!(StrinkDatPtr=(APTR)AllocMem(sizeof(StrinkData),MEMF_CHIP))) CleanUp();
  268.   TempPtr = StrinkDatPtr;
  269.   for (Count = 0;Count < sizeof(StrinkData)/2;Count++)
  270.     {
  271.     *TempPtr++ = StrinkData[Count];
  272.     }
  273.   StrinkImage.ImageData = StrinkDatPtr;
  274.   if(!(IconDatPtr=(APTR)AllocMem(sizeof(IconData),MEMF_CHIP))) CleanUp();
  275.   TempPtr = IconDatPtr;
  276.   for (Count = 0;Count < sizeof(IconData)/2;Count++)
  277.     {
  278.     *TempPtr++ = IconData[Count];
  279.     }
  280.   IconImage.ImageData = IconDatPtr;
  281.   if(!(w=(struct Window *)OpenWindow(&nw))) CleanUp();
  282.   mClass = INTUITICKS;
  283.   while (mClass != CLOSEWINDOW)
  284.   {
  285.     (void) Wait (1<<w->UserPort->mp_SigBit);
  286.     if ((wmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
  287.       {
  288.       mClass = wmsg->Class;
  289.       ReplyMsg ((struct Message *)wmsg);
  290. #ifdef DEBUG
  291.       printf ("\nMessage %d\n",mClass);
  292. #endif
  293.       switch (mClass)
  294.     {
  295.     case GADGETUP:
  296.       StrinkWindow ();
  297.       break;
  298.     }
  299.       }
  300.   }
  301.   while ((wmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
  302.     {
  303.     ReplyMsg ((struct Message *)wmsg);
  304.     }
  305.   CleanUp();
  306. }
  307.  
  308. void CleanUp()
  309. {
  310.   if (StrinkDatPtr) FreeMem(StrinkDatPtr,(ULONG)sizeof(StrinkData));
  311.   if (IconDatPtr) FreeMem(IconDatPtr,(ULONG)sizeof(IconData));
  312.   if (w) CloseWindow(w);
  313.   if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
  314.   if (GfxBase) CloseLibrary((struct Library *)GfxBase);
  315.   exit(0);
  316. }
  317.  
  318. void StrinkWindow()
  319. {
  320. ULONG imClass, mSecs, mMicros, oSecs, oMicros;
  321. BOOL DoubleClicked;
  322.   while ((wmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
  323.     {
  324.     ReplyMsg ((struct Message *)wmsg);
  325.     }
  326.   nw.LeftEdge = w->LeftEdge;
  327.   nw.TopEdge  = w->TopEdge;
  328.   nw.Width    = w->Width;
  329.   nw.Height   = w->Height;
  330.   CloseWindow(w);
  331.   if(!(w=(struct Window *)OpenWindow(&iw))) CleanUp();
  332.   imClass = INTUITICKS;
  333.   DoubleClicked = FALSE;
  334.   oSecs = 0;
  335.   oMicros = 0;
  336.   while (!DoubleClicked)
  337.   {
  338.     (void) Wait (1<<w->UserPort->mp_SigBit);
  339.     if ((iwmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
  340.       {
  341.       imClass = iwmsg->Class;
  342.       mSecs   = iwmsg->Seconds;
  343.       mMicros = iwmsg->Micros;
  344.       ReplyMsg ((struct Message *)iwmsg);
  345.       if (imClass = GADGETDOWN)
  346.     {
  347.     DoubleClicked = DoubleClick (oSecs,oMicros,mSecs,mMicros);
  348.     oSecs = mSecs;
  349.     oMicros = mMicros;
  350.     }
  351. #ifdef DEBUG
  352.       printf ("\nIcon Message %d\n",imClass);
  353. #endif
  354.       }
  355.   }
  356.   while ((iwmsg = (struct IntuiMessage *)GetMsg (w->UserPort)) != NULL)
  357.     {
  358.     ReplyMsg ((struct Message *)iwmsg);
  359.     }
  360.   iw.LeftEdge = w->LeftEdge;
  361.   iw.TopEdge  = w->TopEdge;
  362.   iw.Width    = w->Width;
  363.   iw.Height   = w->Height;
  364.   CloseWindow(w);
  365.   if(!(w=(struct Window *)OpenWindow(&nw))) CleanUp();
  366. }
  367.